# 541.反转字符串II
#
# 给定一个字符串s和一个整数k，从字符串开头算起，每计数至2k个字符，就反转这2k字符中的前k个字符。
#
# 如果剩余字符少于k个，则将剩余字符全部反转。
# 如果剩余字符小于2k但大于或等于k个，则反转前k个字符，其余字符保持原样。


class Solution:
    # 两个月之前的写法
    def reverseStr(self, s: str, k: int) -> str:
        long = len(s)
        res = ""
        for i in range(0, long, 2 * k):
            if len(s[i:]) > 2 * k:
                res += s[i:i+k][::-1] + s[i+k:i+2*k]
            elif len(s[i:]) > k:
                res += s[i:i+k][::-1] + s[i+k:]
            else:
                res += s[i:][::-1]
        return res

    
    # 今天的写法
    def reverseStr2(self, s: str, k: int) -> str:
        res = ""
        while len(s) > 0:
            if len(s) > 2 * k:
                res += s[:k][::-1] + s[k:2*k]
                s = s[2*k:]
            elif len(s) > k:
                res += s[:k][::-1] + s[k:]
                s = []
            else:
                res += s[:k][::-1]
                s = []
        return res


    # 参考卡哥视频的写法，是比我的要简洁
    def reverseStr3(self, s: str, k: int) -> str:
        count = len(s)
        res = ""
        for i in range(0,count,2*k):
            if i + k <= count:
                res += s[i:i+k][::-1] + s[i+k:i+2*k]
            else:
                res += s[i:][::-1]
        return res


if __name__ == '__main__':
    s = "abcdefg"
    s = "abcd"
    k = 2
    temp = Solution()
    res = temp.reverseStr(s,k)
    print(res)
